home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 2003 August / MW 8 2003 CD1.iso / Inside Macworld / Product News / gimp-1.2.4.sit / gimp-1.2.4 / plug-ins / perl / examples / gap-vcr < prev    next >
Encoding:
Text File  |  1999-12-10  |  2.4 KB  |  117 lines

  1. #!/usr/bin/perl
  2.  
  3. use Gimp::Feature qw(perl-5.005 gtk-1.2);
  4. use Gimp ('__','N_');
  5. use Gimp::Fu;
  6. use Gtk;
  7.  
  8. $VERSION=0.1;
  9.  
  10. # possible TODO
  11. # - improve last/first frame finding
  12. # - implement autoplay
  13.  
  14. my $image;
  15. my $f; # current frame adjustment
  16. my $s; # slider
  17.  
  18. sub drawable {
  19.    ($image->get_layers)[0];
  20. }
  21.  
  22. sub get_index {
  23.    (($image->get_filename) =~ /(\d+)\.[^\.]+$/g)[0];
  24. }
  25.  
  26. sub upd {
  27.    $f->set_value(get_index);
  28.    Gimp->displays_flush;
  29. }
  30.  
  31. sub create_main {
  32.    my $w = new Gtk::Window;
  33.  
  34.    $w->set_title("VCR Console -- ". $image->get_filename);
  35.    $w->signal_connect("destroy",sub {main_quit Gtk});
  36.  
  37.    my $v = new Gtk::VBox (0,5);
  38.    $w->add ($v);
  39.  
  40.    my $h = new Gtk::HBox (1,0);
  41.    $v->add($h);
  42.  
  43.    my $current = get_index;
  44.    drawable->gap_last;  my $last  = get_index;
  45.    drawable->gap_first; my $first = get_index;
  46.    drawable->gap_goto($current);
  47.  
  48.    $f = new Gtk::Adjustment $current, $first, $last+1, 1, 10, 1;
  49.    $f->signal_connect(value_changed => sub {
  50.       my $n = $_[0]->value;
  51.       if ($n != get_index) {
  52.          drawable->gap_goto($n);
  53.          upd;
  54.       }
  55.    });
  56.  
  57.    $s = new Gtk::HScale $f;
  58.    $s->set_update_policy('delayed');
  59.    $s->set_digits(0);
  60.    $s->set_value_pos('left');
  61.    $s->grab_focus;
  62.    $v->add($s);
  63.  
  64.    $w->set_focus($s);
  65.  
  66.    $h->add(Gtk::Object::new Gtk::Button 
  67.            label => '|<<',
  68.            can_focus => 0,
  69.            signal::clicked => sub {
  70.               drawable->gap_first; upd;
  71.            });
  72.    $h->add(Gtk::Object::new Gtk::Button 
  73.            label => '<',
  74.            can_focus => 0,
  75.            signal::clicked => sub {
  76.               drawable->gap_prev; upd;
  77.            });
  78.    $h->add(Gtk::Object::new Gtk::Button 
  79.            label => '>',
  80.            can_focus => 0,
  81.            signal::clicked => sub {
  82.               drawable->gap_next; upd;
  83.            });
  84.    $h->add(Gtk::Object::new Gtk::Button 
  85.            label => '>>|',
  86.            can_focus => 0,
  87.            signal::clicked => sub {
  88.               drawable->gap_last; upd;
  89.  
  90.            });
  91.    show_all $w;
  92. }
  93.  
  94. register "plug_in_gap_vcr_console",
  95.          "Gap VCR Console",
  96.          "This plug-in provides a basic vcr-type gap control panel for the image",
  97.          "Marc Lehmann",
  98.          "Marc Lehmann",
  99.          $VERSION,
  100.          N_"<Image>/Video/VCR Console...",
  101.          "*",
  102.          [],
  103.          [],
  104.          ['gimp-1.1'],
  105.          sub {
  106.    $image = $_[0];
  107.             
  108.    Gimp::gtk_init;
  109.    create_main;
  110.    main Gtk;
  111.  
  112.    ();
  113. };
  114.  
  115. exit main;
  116.  
  117.